#include "transLineal.h"

TransLineal::TransLineal(QWidget *parent)
    : QDialog(parent)
{
	ui.setupUi(this);

    plot = new QwtPlot(this);
	linea = new QwtPlotCurve("Curve 1");
	linea->attach(plot);
	linea->setPen(QPen(Qt::darkRed));
	plot->replot();
	plot->setAxisScale(QwtPlot::yLeft, 0.0, 255);
	plot->setAxisScale(QwtPlot::xBottom, 0.0, 255);
	ui.plotLayout->addWidget(plot);
	addPoint();
	addPoint();
}

TransLineal::~TransLineal()
{

}

//Almacena el valor de los campos de textos en dos arrays
void TransLineal::getArrays(double vx[] , double vy[]){
    //Calculamos el valor de los puntos actuales
	QList <Punto> puntos;
	listaSpin::iterator i;
	listaSpin::iterator j;
	i = spinx.begin();
	j = spiny.begin();
	while(i != spinx.end()) {
    	puntos.push_back(Punto((*i)->value(), (*j)->value()));
    	i++;
    	j++;
    }
	qSort(puntos.begin(), puntos.end());
	cout << puntos.size() << endl;
	int size = puntos.size();
	for(int pos = 0; pos < size; pos++){
		Punto aux = puntos.takeFirst();
		vx[pos] = aux.getX();
		vy[pos] = aux.getY();
		cout << "i" << vx[pos] << vy[pos] << endl;
	}

}

QList <QLine> TransLineal::getLineas() {
	int size = spinx.size();
	double vx[size];
    double vy[size];
    getArrays(vx, vy);
	for(int i = 0; i < (size-1); i++){
		lineas.push_back(QLine(vx[i], vy[i], vx[i+1], vy[i+1]));
	}
	return lineas;
}

QDoubleSpinBox * TransLineal::nuevoSpin(){
	QDoubleSpinBox * nuevo = new QDoubleSpinBox(this);
	nuevo->setMinimum(0);
	nuevo->setMaximum(255);
	nuevo->setSingleStep(0.5);
    QObject::connect(nuevo, SIGNAL(valueChanged(double)),
                     this, SLOT(previsualizar()));
	return nuevo;
}

void TransLineal::addPoint(){
	QDoubleSpinBox * sx = nuevoSpin();
	QDoubleSpinBox * sy = nuevoSpin();

	spinx.push_back(sx);
	spiny.push_back(sy);

	ui.grid->addWidget(sx);
	ui.grid->addWidget(sy);

}

void TransLineal::deletePoint(){
	//Borra Spin Y
	ui.grid->removeWidget(spiny.last());
	delete spiny.last();
	spiny.pop_back();

	//Borra Spin X
	ui.grid->removeWidget(spinx.last());
	delete spinx.last();
	spinx.pop_back();
}

void TransLineal::previsualizar(){
	int size = spinx.size();

	double vx[size];
	double vy[size];
	getArrays(vx, vy);
	linea->setData(vx, vy, size);
	plot->replot();
}

void TransLineal::aceptar() {
   accept();
}


